package com.boot.export.program.pdf;


import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

public class TestNewPdf {


    public static void main(String[] args) throws Exception {
        //构建容器
        //生成的pdf文件名
        PdfWriter writer = new PdfWriter("G:\\My_practice_program\\export\\outFile\\zhang_simple_table.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
        //使用系统本地字体，可以解决生成的pdf中无法显示中文问题，本处字体为宋体
        //可以直接把例如： C:\Windows\Fonts|ADOBESONGSTD-LIGHT.OTF字体文件拷贝到项目中
        //在创建字体时直接使用即可解决中文问题
        PdfFont sysFont = PdfFontFactory.createFont("ADOBESONGSTD-LIGHT.OTF", PdfEncodings.IDENTITY_H, true);
        //添加文本
        document.add(new Paragraph("Hello World!"));
        //定义表格
        Table table = new Table(new float[]{3, 3, 3});
        table.setWidth(UnitValue.createPercentValue(100));
        //自定义的封装表格数据
        formatData(table, getUsers(), sysFont);
        document.add(table);
        document.close();
    }

    /*
     *自定义的一个数据源
     */
    public static List<User> getUsers() {
        List<User> list = new ArrayList<User>();
        User user = null;
        for (int i = 0; i < 5; i++) {
            user = new User();
            user.setId(i);
            user.setName("ss " + i);
            user.setAdd("西安--" + i);
            list.add(user);
        }
        return list;
    }

    /*
     * 使用pdf表格工具，将list中数据封装进pdf的table中
     * 传入的三个参数分别是，table对象，数据源list集合，创建的PdfFont对象
     */
    public static void formatData(Table table, List<User> list, PdfFont font) {
        table.addCell(new Cell().add(new Paragraph(" id ")));
        table.addCell(new Cell().add(new Paragraph(" name ")));
        table.addCell(new Cell().add(new Paragraph(" add ")));
        for (User user : list) {
            table.addCell(new Cell().add(new Paragraph(user.getId() + "")));
            table.addCell(new Cell().add(new Paragraph(user.getName()).setFont(font)));
            //测试数据中，add属性中含有中文，所以 需要设置字体
            table.addCell(new Cell().add(new Paragraph(user.getAdd()).setFont(font)));
        }
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class User {
    private Integer id;
    private String name;
    private String add;
}